/**
 * 飞控大作业
 *
 * File:		timer_util.c
 * Brief:		定时器的功能函数
 * Author:      Duan Yuhao
 * Modified:	2022/5/25
 *
 */
#include "timer_util.h"
#include "calc_move.h"

extern  ctrl_data_typedef ctrl_data;

const uint8_t *pData_to_ground = "1";
const uint8_t *pData_from_ground = "0";
const uint8_t *pData_from_imu = "0";
/********** VOLATILE USER CODE **********/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
{
    if (htim == &htim1) //通过解算代码得到PWM的输出值，赋值给每个电机
    {
        /* wheel 1000Hz count=1000/period        */
        __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, ctrl_data.channel_left_lr);  //m1
        __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, ctrl_data.channel_left_fb);  //m2
        __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_3, ctrl_data.channel_right_lr);  //m3
        __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_4, ctrl_data.channel_right_fb);  //m4


    }
    //飞行控制器需要每100ms向地面站发送一次状态数据  TIM2->UART 2
    else if (htim == &htim2)
    {
    	HAL_UART_Transmit(huart2, &pData_to_ground, 1 , 100 );

    }
    //IMU传感器自动以100Hz的频率发送姿态和角速度 TIM4-> UART 1
    else if (htim == &htim4)
    {
    	HAL_UART_Receive(huart1, &pData_from_imu, 1 , 100 );
    	//若指令仍为0，没有收到心跳信号1，则判定为不正常
    	if(pData_from_imu[0] == '0'){
    		UAV_para.commu_para = UNNORMAL_IMU;
    	}
    	//若指令仍为1，说明收到心跳信号1，则改为0，等待下一次接受心跳报文
    	else{
    		pData_from_imu[0] == '0'
    	}

    }
    //地面站每20毫秒向飞行控制员发送一次心跳信号
    else if (htim == &htim3){
    	HAL_UART_Receive(huart2, &pData_from_imu, 1 , 100 );
    	//若指令仍为0，没有收到心跳信号1，则判定为不正常
    	if(pData_from_imu[0] == '0'){
    		UAV_para.commu_para = UNNORMAL_GROUND;
    	}
    	//若指令仍为1，说明收到心跳信号1，则改为0，等待下一次接受心跳报文
    	else{
    		pData_from_imu[0] == '0'
    	}
    }
}






